package com.semidata.trp.report.main;

import com.semidata.rtd.core.executor.TaskExecutorService;
import com.semidata.rtd.core.executor.ThreadPoolTaskExecutor;
import com.semidata.rtd.core.http.server.HttpService;
import com.semidata.rtd.core.log.DefaultLogService;
import com.semidata.rtd.core.log.Logger;
import com.semidata.rtd.core.service.ServiceManager;
import com.semidata.trp.report.config.Config;
import com.semidata.trp.report.http.ReportHttpDispatcher;
import com.semidata.trp.report.service.ReportService;

public class Main {

	private static Config config;

	public static void main(String[] args) {

		String configFile;
		if (args.length > 0) {
			configFile = args[0];
		} else {
			configFile = null;
		}

		try {
			Config.init(configFile);
		} catch (RuntimeException e) {
			System.err.println("can not load config file");
			return;
		}

		config = Config.getConfig();

		DefaultLogService logService = new DefaultLogService(config.getLogRoot(),
				config.isLogDebugEnabled());
		ServiceManager.register(logService);
		//ServiceManager.register(new ReportService());
		ServiceManager.register(new TaskExecutorService(
				new ThreadPoolTaskExecutor()));
		ServiceManager.register(new HttpService(config.getHttpPort(), config
				.getHttpThreads(), new ReportHttpDispatcher()));
		ServiceManager.startAll();
		Logger.log("DEBUG", "server started");
		ServiceManager.sync();
	}

}
